//
// Created by AYL_iwalk on 21/2/20.
//

#include <jni.h>
#include <android/log.h>

int dynamicFun(JNIEnv *env, jobject thiz, jint p0, jint p1) {
//    __android_log_print(ANDROID_LOG_INFO, "zj", "%s", "Hello, World");
    return p0+p1;
}



static const JNINativeMethod jniNativeMethod[] = {
        // 第二个字符串使用 javap 命令得到
        // 首先cmd 切换到 build\tmp\kotlin-classes\debug\com\xixilala\ndkdemo 目录
        // 再 javap -s  DynamicNDKRegister
        // 得到原生方法的签名
        {"dynamicFun","(II)I",(void *) (dynamicFun) },

};


/**
 * 1.设置jvm全局变量，多线程需要用到
 * 2.nullptr: C++11后，要取代NULL，作用是可以给初始化的指针赋值
 */
JavaVM *jvm = nullptr;
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *javaVm, void *pVoid) {
    jvm = javaVm;
    // 1.通过JavaVM 创建全新的JNIEnv
    JNIEnv *jniEnv = nullptr;
    // 2.判断创建是否成功
    jint result = javaVm->GetEnv(reinterpret_cast<void **>(&jniEnv),JNI_VERSION_1_6); // 参数2：是JNI的版本 NDK 1.6   JavaJni 1.8
    if (result != JNI_OK) {
        return -1; // 主动报错
    }
    // 3.找到需要动态动态注册的Jni类
    jclass jniClass = jniEnv->FindClass("com/xixilala/ndkdemo/DynamicNDKRegister");
    //动态注册（这里就需要用到签名后的方法了）   待注册class 方法集合 方法数量
    jniEnv->RegisterNatives(jniClass, jniNativeMethod, sizeof(jniNativeMethod) / sizeof(JNINativeMethod));
    return JNI_VERSION_1_6;
}



